package com.example.springcloud.stream.producer;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.messaging.Source;
import org.springframework.messaging.support.MessageBuilder;

/**
 * 消息发送类
 * weiximei on 2018/8/25
 */
/**
 *@EnableBinding 注解是绑定消息通道，也就是消息发往哪里去
 *Source.class 是spring cloud提供的一个接口，帮我们预定了一个ouput的接口。
 *
 * Source.class 的部分源码:
 *
 *     @Output("output")
 *     MessageChannel output();
 *   表示某个方法上使用了@Output注解，并且返回的是MessageChannel这个类型，就可以当做为ouput的一个端口,
 *   然后把这个MessageChannel和@Output绑定起来就可以使用了。
 *
 *  也可以自定义一个Source类型
 *
 */
@EnableBinding(Source.class)
public class SendService {

    /**
     * 因为绑定的是Source.class，所有这里只能使用Source这个类
     */
    @Autowired
    Source source;

    /**
     * 表示发送消息
     * @param msg
     */
    public void sendMsg(String msg){
        // 使用绑定的Source 把消息发送里面去
        source.output().send(MessageBuilder.withPayload(msg).build());
    }

}
